package com.workhours.dto;

import com.fasterxml.jackson.annotation.JsonSetter;
import com.fasterxml.jackson.annotation.Nulls;
import lombok.Data;

/**
 * 提莫API响应数据结构
 * 
 * @author WorkHours
 * @since 2025-09-19
 */
@Data
public class HolidayResponse {
    
    /**
     * 响应码，0表示成功
     */
    private Integer code;
    
    /**
     * 节假日数据，key为MM-dd格式，value为节假日详情
     */
    private java.util.Map<String, HolidayDetail> holiday;
    
    /**
     * 节假日详情
     */
    @Data
    public static class HolidayDetail {
        /**
         * 是否为节假日
         * 注意：提莫API可能返回布尔值或字符串（如"中秋节"），需要特殊处理
         */
        private Boolean holiday;
        
        /**
         * 节假日名称
         */
        private String name;
        
        /**
         * 工资倍数
         */
        private Integer wage;
        
        /**
         * 完整日期
         */
        private String date;
        
        /**
         * 休息天数
         */
        private Integer rest;
        
        /**
         * 是否为调休后的补班（holiday=false时存在）
         */
        private Boolean after;
        
        /**
         * 调休的目标节假日
         */
        private String target;
        
        /**
         * 自定义setter来处理holiday字段可能是字符串的情况
         * 提莫API在某些情况下会返回节假日名称而不是布尔值
         * @param value 可能是Boolean或String
         */
        @JsonSetter(nulls = Nulls.SET)
        public void setHoliday(Object value) {
            if (value == null) {
                this.holiday = null;
            } else if (value instanceof Boolean) {
                this.holiday = (Boolean) value;
            } else if (value instanceof String) {
                // 如果是字符串（如"中秋节"），说明这是一个节假日
                // 只有 "true" 或 "false" 字符串才按布尔解析，其他字符串视为节假日
                String strValue = (String) value;
                if ("true".equalsIgnoreCase(strValue)) {
                    this.holiday = true;
                } else if ("false".equalsIgnoreCase(strValue)) {
                    this.holiday = false;
                } else {
                    // 非布尔字符串（如"中秋节"）表示这是一个节假日
                    this.holiday = true;
                }
            } else {
                // 其他类型默认为true
                this.holiday = true;
            }
        }
    }
}
